package com.jwmp.rbac.mapper;

import com.jwmp.core.util.QueryObject;
import com.jwmp.rbac.domain.Employee;
import com.jwmp.rbac.domain.Role;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface EmployeeMapper {
    /**
     * 添加员工
     * @param emp
     */
    void insert(@Param("emp") Employee emp);

    /**
     * 根据 id 修改员工
     * @param emp
     */
    void update(@Param("emp") Employee emp);

    /**
     * 销毁员工
     * @param id
     */
    void updateStatus(@Param("id") Long id,@Param("status") Boolean status);

    /**
     * 查询所有的员工，包括员工对应的部门
     * @return
     */
    List<Employee> selectList(@Param("qo") QueryObject qo);

    /**
     * 查询满足条件的总记录数
     * @return
     */
    int selectCount(@Param("qo") QueryObject qo);

    /**
     * 根据 id 查询员工信息，包括部门
     * @param id
     * @return
     */
    Employee selectOne(@Param("id") Long id);

    /**
     * 通过名称查看员工信息
     * @param username
     * @return
     */
    Employee selectByUsername(@Param("username") String username);

    /**
     * 通过 员工id 查询存在或不存在的角色列表
     * @param exist true ： 查询存在的角色，false：查询不存在的角色
     * @param empId 员工的id
     * @return  存在或不存在的角色列表
     */
    List<Role> selectRolesByEmpId(@Param("exist") Boolean exist,@Param("empId") Long empId);

    /**
     * 批量授予角色
     * @param empId 员工id
     * @param newRoleIdList 批量加入的角色id
     */
    void insertBath(@Param("empId") Long empId,@Param("newRoleIdList") List<Long> newRoleIdList);

    /**
     * 批量删除员工对应的角色
     * @param empId 要删除角色的员工id
     * @param delRoleIdList 要删除的角色
     */
    void delBath(@Param("empId") Long empId,@Param("delRoleIdList") List<Long> delRoleIdList);

    /**
     * 查询部门下的所有员工信息
     * @param deptId
     * @return
     */
    List<Employee> selectExistEmpsByDeptId(@Param("deptId") Long deptId);

    /**
     * 查询不属于该部门的所有员工
     * @param deptId
     * @return
     */
    List<Employee> selectNotExistEmpsByDeptId(@Param("deptId") Long deptId);

    /**
     * 根据员工id 修改员工的部门
     * @param deptId 部门 id
     * @param newEmpList   需要修改的员工 id 列表
     */
    void updateDept(@Param("deptId") Long deptId,@Param("newEmpList") List<Long> newEmpList);

    /**
     * 用户登录功能
     * @param username
     * @param password
     * @return
     */
    Employee login(@Param("username") String username, @Param("password") String password);
}
